#!usr/bin/env python3
# -*- coding: utf-8 -*-

#第五章 文件和IO 2017年6月8日15:29:53

import sys,os

print(sys.getdefaultencoding()) # 获取默认的编码

print(os.path.realpath(__file__),os.path.split(os.path.realpath(__file__)))

scriptUrl = os.path.split(os.path.realpath(__file__))[0] #获取脚本所在根目录

# 读取文本
url = os.path.join(scriptUrl,"asset","test.txt") 
#url = os.path.join(scriptUrl,"readMe.txt") 
with open(url,'rt') as f:
    data = f.read()
    print(data)

import array,struct
nums = array.array("i",[1,2,3]) # 构造一个C结构的数据
d = dict([("a",100)])
url = os.path.join(scriptUrl,"asset","data.bin")
#nums = struct.pack("i",128)
with open(url,"wb") as f:
    f.write(nums) # 保存在文件

a = array.array("i")
with open(url,"rb") as f:
    n = f.read() # 读取二进制文件
    n = array.array("i",n) # 解析数据
    print('n=',n,n[0])

# 字符串的IO操作

import io

s = io.StringIO()
print(type(s))

s.write("Hello world")
s.read(4) # 读取4个字节长度的内容
s.getvalue() # 获取字符串里面的所有内容

# 读写压缩文件
import gzip,bz2

# gzip.open
# bz2.open 

# os.path 模块 可以判断是否目录，是否文件，文件是否存在；还可以获取文件的大小，修改日期等

#获取文件列表

names = os.listdir(scriptUrl) # 得到所有文件和目录
print(names) 

pyFiles = [pyfile for pyfile in names if pyfile.endswith(".py")]
print(pyFiles) 


#创建临时文件和文件夹

#序列化Python对象保存到文件

import pickle

f = open(os.path.join(scriptUrl,"seq.data"),"wb")

pickle.dump([1,2,3],f)
pickle.dump("Hello",f)  # 序列化保存到文件
f.close()

f = open(os.path.join(scriptUrl,"seq.data"),"rb")

data = pickle.load(f) # 加载序列化数据 第一次加载到的对于先dump的数据 [1,2,3]
print(data)

ret = pickle.dumps([1,2,3]) # 序列化成一个二进制数据
print(ret)